package api

import (
	"bufio"
	"fmt"
	"io"
	"os"
	"time"
)

const (
	AUTHOR string = "venki.chen"
)

var (
	datetime string
	welcome  string
)

func init() {
	now := time.Now()
	datetime = now.Format("2006-01-02 15:04:05")
	welcome = AUTHOR + "欢迎你来到今日的golang语言学习，现在的时间是：" + datetime
}

func Access() {
	fmt.Println(welcome)
	fmt.Println("-------------------")
	// WriteFile01()
	// WriteFile02()
	// WriteFile03()
	// WriteFile04()
	OneToOne()
}

// OneToOne 将一个文件内容输出到另一个文件中去
func OneToOne() {
	// 将other下面的file01文件导入到some文件夹西面的file02文件中

}

// WriteFile04 WriteFile04 WriteFile write file operator 源文件内容后面追加新内容
func WriteFile04() {
	// OpenFile 文件路径，读取模式，权限控制Linux421
	file := "../other/file01.txt"
	file01, err := os.OpenFile(file, os.O_RDWR|os.O_APPEND, 0666)
	if err != nil {
		fmt.Printf("open file01 err=%v\n", err)
		return
	}
	defer file01.Close()
	reader := bufio.NewReader(file01)

	for {
		readString, err := reader.ReadString('\n')
		if err == io.EOF { // 如果读取到文件末尾
			break
		}
		fmt.Println(readString)
	}

	str := "陈文小超\r\n"

	writer := bufio.NewWriter(file01)

	for i := 0; i < 5; i++ {
		writer.WriteString(str)
	}
	writer.Flush()

}

// WriteFile03 WriteFile03 WriteFile write file operator 源文件内容后面追加新内容
func WriteFile03() {
	// OpenFile 文件路径，读取模式，权限控制Linux421
	file := "../other/file01.txt"
	file01, err := os.OpenFile(file, os.O_WRONLY|os.O_APPEND, 0666)
	if err != nil {
		fmt.Printf("open file01 err=%v\n", err)
		return
	}
	defer file01.Close()
	str := "venki.chen\r\n"

	writer := bufio.NewWriter(file01)

	for i := 0; i < 10; i++ {
		writer.WriteString(str)
	}
	writer.Flush()
}

// WriteFile02 WriteFile02 WriteFile write file operator 清空源文件内容，重新写入新内容
func WriteFile02() {
	// OpenFile 文件路径，读取模式，权限控制Linux421
	file := "../other/file01.txt"
	file01, err := os.OpenFile(file, os.O_WRONLY|os.O_TRUNC, 0666)
	if err != nil {
		fmt.Printf("open file01 err=%v\n", err)
		return
	}
	defer file01.Close()
	str := "poet.chao\r\n"

	writer := bufio.NewWriter(file01)

	for i := 0; i < 10; i++ {
		writer.WriteString(str)
	}
	writer.Flush()
}

// WriteFile01 WriteFile write file operator 创建新文件并写入内容
func WriteFile01() {
	// OpenFile 文件路径，读取模式，权限控制Linux421
	file := "../other/file.txt"
	file01, err := os.OpenFile(file, os.O_WRONLY|os.O_CREATE, 0666)
	if err != nil {
		fmt.Printf("open file err=%v\n", err)
		return
	}
	defer file01.Close()
	str := "venki.chen\r\n"
	/**
	因为writer是带缓存的，因此在调用writerstring方法时，其实内容先写到缓存的，
	所以需要调用flush方法，将缓存的数据刷新到文件中去，否则文件中是不存在内容的。
	*/
	writer := bufio.NewWriter(file01)

	for i := 0; i < 5; i++ {
		writer.WriteString(str)
	}
	writer.Flush()
}
